//引入并声明使用插件
import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);

import routes from './routes'

//VueRouter 是路由器对象的构造函数
//this.$router.push 调用的是路由器对象的方法，这个方法并不是路由器实例化对象的方法，二十这个对象原型的方法
//this.$router是实例化对象 是VueRouter的实例化对象

const originPush = VueRouter.prototype.push  //将原有的push方法地址保存起来，后期还要使用也能拿到
const originReplace = VueRouter.prototype.Replace

//可以大胆的去修改原型的push，让原型的push指向林外一个函数
VueRouter.prototype.push = function(location,onResolved,onRejected){
    //location就是我们调用this.$router.push，传递过来的对象
    if(onResolved === undefined && onRejected === undefined){
        return originPush.call(this,location).catch(()=>{});
    }else{
        return originPush.call(this,location,onResolved,onRejected)
    }

};

//可以大胆的去修改原型的originReplace，让原型的push指向林外一个函数
VueRouter.prototype.Replace = function(location,onResolved,onRejected){
    //location就是我们调用this.$router.originReplace，传递过来的对象
    if(onResolved === undefined && onRejected === undefined){
        return originReplace.call(this,location).catch(()=>{});
    }else{
        return originReplace.call(this,location,onResolved,onRejected)
    }

};



//需要向外暴露一个路由器对象
export default new VueRouter({
    routes,
    scrollBehavior (to, from, savedPosition) {
        return { x: 0, y: 0 }
      }
});